package com.fjnu.dao;

import com.fjnu.entity.Comment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

@Repository
public class CommentDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 新增评论
     * 规则：article_id 不能为空；更新失败返回 0，成功返回 1
     */
    public int insert(Comment newComment) {
        // 校验 articleId 非空（文档要求）
        if (newComment.getArticleId() == null || newComment.getContent() == null) {
            return 0;
        }
        String sql = "INSERT INTO comment(article_id, user_id, content, support, oppose, create_time) " +
                "VALUES(?, ?, ?, 0, 0, NOW())";
        return jdbcTemplate.update(sql,
                newComment.getArticleId(),
                newComment.getUserId(),
                newComment.getContent());
    }

    /**
     * 评论点赞（增量修改）
     * 规则：基于 incremented 调整点赞数，无显式非空校验但需确保 commentId 有效
     */
    public int updateSupport(Integer commentId, Integer incremented) {
        if (commentId == null || incremented == null) {
            return 0;
        }
        String sql = "UPDATE comment SET support = support + ? WHERE id = ?";
        return jdbcTemplate.update(sql, incremented, commentId);
    }

    /**
     * 评论点差（增量修改）
     * 规则：基于 incremented 调整点差数，逻辑与点赞一致
     */
    public int updateOppose(Integer commentId, Integer incremented) {
        if (commentId == null || incremented == null) {
            return 0;
        }
        String sql = "UPDATE comment SET oppose = oppose + ? WHERE id = ?";
        return jdbcTemplate.update(sql, incremented, commentId);
    }

    /**
     * 查询文章对应的所有评论
     * 规则：articleId 不能为空；无结果返回 Null，否则按创建时间降序返回
     */
    public List<Comment> selectAllCommentsForArticle(Integer articleId) {
        if (articleId == null) {
            return null;
        }
        String sql = "SELECT * FROM comment WHERE article_id = ? ORDER BY create_time DESC";
        try {
            return jdbcTemplate.query(sql,
                    new BeanPropertyRowMapper<>(Comment.class),
                    articleId);
        } catch (Exception e) {
            return null; // 无结果时返回 Null（文档要求）
        }
    }

    /**
     * 查询文章对应范围的所有评论（分页）
     * 规则：需指定 articleId、startIndex、endIndex；无结果返回 Null
     */
    public List<Comment> selectCommentsWithLimitForArticle(Integer articleId, Integer startIndex, Integer endIndex) {
        if (articleId == null || startIndex == null || endIndex == null) {
            return null;
        }
        // MySQL 分页：LIMIT 起始索引, 数据条数（条数 = 结束索引 - 起始索引）
        String sql = "SELECT * FROM comment WHERE article_id = ? " +
                "ORDER BY create_time DESC LIMIT ?, ?";
        try {
            return jdbcTemplate.query(sql,
                    new BeanPropertyRowMapper<>(Comment.class),
                    articleId, startIndex, endIndex - startIndex);
        } catch (Exception e) {
            return null;
        }
    }
}